{\rtf1\ansi\ansicpg1252\uc1\deff0
{\fonttbl{\f0\fmodern\fcharset0\fprq2 RobotoMono-SemiBold;}}
{\colortbl;\red0\green0\blue0;\red255\green255\blue255;\red128\green128\blue128;}
\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\f0\fs22\cf0
\pard\plain \tx0\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2880\tx3600\tx4320\ltrch\loch {\f0\fs22\b0\i0 Have you heard of "Synchronous Programming"? It's a programming paradigm first sketched out in the 1980's that "makes the same abstraction for programming languages as the synchronous abstraction in digital circuits" [citation]. To put this in more practical terms, synchronous languages let you describe systems where a bunch of stuff happens "simultaneously", while also giving you tools to ensure that those simultaneous actions don't collide (so to speak) with each other.}
\par\plain \f0\fs22\b0\i0
\par\plain {\f0\fs22\b0\i0 In hardware, }
\par\plain \f0\fs22\b0\i0
\par\plain {\f0\fs22\b0\i0 When writing programs that need to deal with exactly this sort of "lots of things happening simultaneously" environment (industrial machinery seems to come up often), synchronous languages can provide cleaner and (in some cases) provably-correct implementations. Some synchronous languages also include facilities for translating their source code into a form that can be run on FPGAs or etched into chips, meaning that your industrial machine controller might not need a CPU at all - it could "run" your control program directly from the logic circuits it generates.}
\par\plain \f0\fs22\b0\i0
\par\plain {\f0\fs22\b0\i0 Research into sychronous programming seems to have peaked from the late 1990s to the early 2000s, and then gradually fallen into obscurity. Some of the languages mentioned in Wikipedia have been lost or abandoned, a few of the research groups seem to be defunct, and Google searches don't turn up any lively forums. There is one project that seems to be active and progressing - }{\field{\*\fldinst HYPERLINK "http://www.averest.org/#about_quartz"}{\fldrslt\f0\fs22\b0\i0 http://www.averest.org/#about_quartz}}{\f0\fs22\b0\i0  - but in general it seems that synchronous programming didn't catch on.}
\par\plain \f0\fs22\b0\i0
\par\plain {\f0\fs22\b0\i0 Since the original publications, modern technology has produced CPUs with hundreds of cores, server farms with thousands of CPUs, cheap FPGAs supported by open-source design tools, and a renewed interest in proving the correctness of distributed and/or parallel programs using tools like TLA+. I think Synchronous Programming is due for a reboot.}
\par\plain \f0\fs22\b0\i0
\par\pard\plain \ltrch\loch {\f0\fs22\b0\i0 - }{\field{\*\fldinst HYPERLINK "https://en.wikipedia.org/wiki/Synchronous_programming_language"}{\fldrslt\f0\fs22\b0\i0 https://en.wikipedia.org/wiki/Synchronous_programming_language}}
\par\plain {\f0\fs22\b0\i0  - "the synchronous abstraction"}
\par\plain \f0\fs22\b0\i0
\par\plain {\f0\fs22\b0\i0  - \loch\af0\hich\af0\dbch\af0\uc1\u8220\'93An implementation can execute several rules concurrently in a clock cycle, provided some sequential execution of those rules can reproduce the behavior of the concurrent execution.\u8221\'94}
\par\pard\plain \tx0\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2880\tx3600\tx4320\ltrch\loch \f0\fs22\b0\i0}